package main

import (
	"fmt"
)
/*
二叉树的三种遍历方式：
*/
func main(){
	root := &Hero{
		No : 1,
		Name : "宋江",
	}
	left1 := &Hero{
		No : 2,
		Name : "吴用",
	}
	left2 := &Hero{
		No : 5,
		Name : "鲁智深",
	}
	right1 := &Hero{
		No : 3,
		Name : "卢俊义",
	}
	right2 := &Hero{
		No : 4,
		Name : "林冲",
	}
	right3 := &Hero{
		No : 6,
		Name : "武松",
	}
	root.left = left1
	left1.left = left2
	left1.right = right3
	root.right = right1
	right1.right = right2
	Pretraversal(root)
	fmt.Println()
	Infixtraversal(root)
	fmt.Println()
	Posttraversal(root)
}

type Hero struct{
	No int
	Name string
	left *Hero
	right *Hero
}


//前序遍历
func Pretraversal(node *Hero){
	if node != nil{
		fmt.Printf("no:%d-name:%s ————>",node.No,node.Name)
		Pretraversal(node.left)
		Pretraversal(node.right)
	}
	
}
//中序遍历
func Infixtraversal(node *Hero){
	if node != nil{
		Infixtraversal(node.left)
		fmt.Printf("no:%d-name:%s ————>",node.No,node.Name)	
		Infixtraversal(node.right)
	}
}
//后序遍历
func Posttraversal(node *Hero){
	if node != nil{
		Posttraversal(node.left)
		Posttraversal(node.right)
		fmt.Printf("no:%d-name:%s ————>",node.No,node.Name)
	}
}